package com.zoe.springcloud.filter;/*
 *@date 2019/12/15 0015
 */

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @author xjr
 */
@Component
public class CustomFilter extends ZuulFilter {

    /**
     * 指定过滤器的类型
     pre ：可以在请求被路由之前调用
     route ：在路由请求时候被调用
     post ：在route和error过滤器之后被调用
     error ：处理请求时发生错误时被调用
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }
    /**
     *  指定过滤器的优先级, 0表示优先执行, 因为我们可以写很多个过滤器
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     *  当前过滤器是否开启, true表示开启
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     *  过滤器执行逻辑, 返回任意Object类型的值,都表示放行,包括null
     *  如果不想往后继续执行了,就使用 setSendZullResponse(false)
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String token=request.getHeader("token");//这里只做一个简单的校验
        if (StringUtils.isBlank(token)){
            context.setSendZuulResponse(false);
            context.setResponseBody("没有权限访问");
            context.setResponseStatusCode(401);
        }
        return null;
    }
}
